<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 1.const常量不能改变 不能重复声明 不能被重新赋值
      //   const a = 10;
      //   const a = 20;
      //   a=30
      //   console.log(a);
      // 2.没有变量提升
      console.log(a);
      const a = 10;
      // 3.块级作用域
      // {
      //     const a = 10;
      //     console.log(a)
      // }
      // console.log(a);

      // 一般情况下 常量 约定俗成 会大写
      // const PI = 3.1415926;
      // const pi = 242342;
      // 4.不会和window绑定
      // const a = 10;
      // console.log(window.a);

      // const ele = document.querySelector

      // 5.const 定义对象；
      // const obj = {
      //     name:"张三",
      //     age:20
      // }

      // // 覆盖式
      // // obj = {
      // //     name:"李四"
      // // }

      // obj.name = "李四";
      // console.log(obj);

      // 不可变对象；
      // 冻结 对象
      // let obj = {
      //     name:"张三",
      //     age:20,
      //     hobby:{
      //         one:"篮球",
      //         two:"足球"
      //     }
      // }
      // // 冻结对象； Object.freeze只能冻结一层对象；
      // Object.freeze(obj);
      // // obj.name = "李四";
      // obj.hobby.one = "乒乓球";
      // console.log(obj);

      // 深冻结
      function deepFreeze(obj) {
        Object.freeze(obj);
        for (let key in obj) {
          if (typeof obj[key] === "object") {
            deepFreeze(obj[key]);
          }
        }
      }

      let obj = {
        name: "张三",
        age: 20,
        hobby: {
          one: "篮球",
          two: "足球",
        },
      };
      deepFreeze(obj);
      obj.hobby.one = "乒乓球";
      console.log(obj);
    </script>
  </body>
</html>
